<?php
/**
 * DolphinGTK - phpGtk framework
 *
 * @package    DolphinGTK
 * @author     Askarov Ruslan
 * @copyright  Askarov Ruslan (c) 2010.
 * @link       http://groups.google.com/group/dolphingtk
 * @license    http://www.opensource.org/licenses/gpl-license.php GPL
 * @version    0.1
 * @since      PHP v.: 5.2.1
 * @subpackage desktop
 * @category   library
 * @filesource
 */

final class Config
{
  // переменная, в которой храним
  // данные после инициализации.
  private static $config;

  // имя файла, для хранения конфигурации
  private static $conf_file;



  /**
   * Метод по умолчанию. Разрешаем использование
   * методов, только как статические.
   *
   * @access public
   * @return void
   */
  public function __construct()
  {
    throw new Exception(
      'Class "Config" used only static methods. And cannot be constructed!'
    );
  }



  /**
   * Метод для сохранения ключа и его значения
   *
   * @access public
   * @param string $key
   * @param string $value
   */
  public static function set( $key, $value )
  {
    if( !is_array(self::$config) ) {
      self::load();
    }

    self::$config[$key] = $value;

    $save = @file_put_contents(
      self::$conf_file,
      json_encode(self::$config)
    );

    if( !$save ) {
      Log::fatal('Config file not writable!');
      exit;
    }
  }




  /**
   * Метод для получения значения ключа
   *
   * @access public
   * @param  string $key
   * @return string
   */
  public static function get( $key )
  {
    if( !empty($key) ) {

      if( !is_array(self::$config) ) {
        self::load();
      }

      if( key_exists($key, self::$config) )
      {
        return self::$config[$key];
      }
      else {
        return false;
      }
    }
  }




  /**
   * Метод для обновления значения по ключу.
   * Так же можно испоользовать метод set.
   *
   * @access public
   * @param string $key
   * @param string $value
   */
  public function update($key, $value)
  {
    self::set( $key, $value );
  }




  /**
   * Метод для загрузки всех ключей.
   *
   * @access public
   * @return void
   */
  public static function load()
  {
    if( class_exists('OS') )
    {
      $conf_file = OS::get_appdata() . 'config.json';
      self::$conf_file = $conf_file;

      if( file_exists( $conf_file ) )
      {
        $json = file_get_contents($conf_file);
        if( empty($json) ) {
          self::$config = array();
        } else {
          self::$config = json_decode($json, true);
        }
      }
      else {
        self::$config = array();
      }
    }
    else {
      Log::fatal('lib "OS" not loaded!');
      exit;
    }
  }
}
?>
